package cn.iocoder.yudao.module.eval.dal.mysql.template;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.eval.controller.admin.template.vo.EvalTemplatePageReqVO;
import cn.iocoder.yudao.module.eval.dal.dataobject.template.EvalTemplateDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 评价模板 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface EvalTemplateMapper extends BaseMapperX<EvalTemplateDO> {

    default PageResult<EvalTemplateDO> selectPage(EvalTemplatePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<EvalTemplateDO>()
                .likeIfPresent(EvalTemplateDO::getTemplateCode, reqVO.getTemplateCode())
                .likeIfPresent(EvalTemplateDO::getTemplateName, reqVO.getTemplateName())
                .eqIfPresent(EvalTemplateDO::getMethodTypeId, reqVO.getMethodTypeId())
                .eqIfPresent(EvalTemplateDO::getTemplateStatus, reqVO.getTemplateStatus())
                .likeIfPresent(EvalTemplateDO::getApplicableProfession, reqVO.getApplicableProfession())
                .eqIfPresent(EvalTemplateDO::getIsDefault, reqVO.getIsDefault())
                .betweenIfPresent(EvalTemplateDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(EvalTemplateDO::getId));
    }

    default EvalTemplateDO selectByTemplateCode(String templateCode) {
        return selectOne(EvalTemplateDO::getTemplateCode, templateCode);
    }

    default List<EvalTemplateDO> selectListByMethodTypeId(Long methodTypeId) {
        return selectList(EvalTemplateDO::getMethodTypeId, methodTypeId);
    }

    default List<EvalTemplateDO> selectListByTemplateStatus(Integer templateStatus) {
        return selectList(EvalTemplateDO::getTemplateStatus, templateStatus);
    }

    default List<EvalTemplateDO> selectListByApplicableProfession(String applicableProfession) {
        return selectList(new LambdaQueryWrapperX<EvalTemplateDO>()
                .like(EvalTemplateDO::getApplicableProfession, applicableProfession));
    }

    default List<EvalTemplateDO> selectListByIsDefault(Boolean isDefault) {
        return selectList(EvalTemplateDO::getIsDefault, isDefault);
    }

    default List<EvalTemplateDO> selectListByProfessionAndType(String profession, Integer templateType) {
        return selectList(new LambdaQueryWrapperX<EvalTemplateDO>()
                .like(EvalTemplateDO::getApplicableProfession, profession)
                .eq(EvalTemplateDO::getTemplateType, templateType)
                .eq(EvalTemplateDO::getTemplateStatus, 1));
    }

    default List<EvalTemplateDO> selectListByStatus(Integer templateStatus) {
        return selectList(new LambdaQueryWrapperX<EvalTemplateDO>()
                .eq(EvalTemplateDO::getTemplateStatus, templateStatus)
                .orderByDesc(EvalTemplateDO::getCreateTime));
    }

}
